Skip to content

Comments

Improve LS APIs to support tuple type mappings#653

Draft
pasindufernando1 wants to merge 13 commits intoballerina-platform:data-mapper-extended-typesfrom
pasindufernando1:TupleBEChanges
Draft

Improve LS APIs to support tuple type mappings#653
pasindufernando1 wants to merge 13 commits intoballerina-platform:data-mapper-extended-typesfrom
pasindufernando1:TupleBEChanges

Conversation

@pasindufernando1
Copy link
Contributor

Copilot AI review requested due to automatic review settings January 22, 2026 05:51
@pasindufernando1 pasindufernando1 marked this pull request as draft January 22, 2026 05:52
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request improves the Language Server APIs to support tuple type mappings in data mapper functionality. The changes enable proper handling of tuple types in mapping operations, including generation of tuple member names, proper indexing with bracket notation, and correct default value generation for tuple elements.

Changes:

  • Enhanced tuple type name generation to display types in the format [type1, type2, ...]
  • Modified data mapping logic to distinguish between tuples (bracket notation) and arrays (dot notation)
  • Added comprehensive test coverage for tuple-based mappings and transformations

Reviewed changes

Copilot reviewed 22 out of 22 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
misc/diagram-util/src/test/resources/RefTypeTest/BalProject7/main.bal Adds test case for record with tuple field
misc/diagram-util/src/test/java/org/ballerinalang/diagramutil/RefTypeTest.java Uncomments updateConfig call to automatically update test expectations
misc/diagram-util/src/main/java/org/ballerinalang/diagramutil/connector/models/connector/ReferenceType.java Implements tuple type name generation with proper member type names
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/source/tupleMember.bal Adds test source for tuple member deletion
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/delete_mapping/config/tupleMember.json Test configuration for tuple member deletion
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_source/source/tupleTransformation.bal Test source for tuple transformation with function return type
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_source/source/tupleMapping.bal Test source for tuple field mapping in records
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_source/config/*.json Test configurations for tuple mapping scenarios
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/source/*.bal Test sources for tuple-based data mapper model generation
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/resources/data_mapper_model/config/*.json Test configurations for tuple model generation
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingSourceTest.java Registers new tuple mapping test cases
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingModelTest.java Registers new tuple model test cases
flow-model-generator/modules/flow-model-generator-ls-extension/src/test/java/io/ballerina/flowmodelgenerator/extension/DataMappingDeleteTest.java Registers tuple member deletion test case
flow-model-generator/modules/flow-model-generator-ls-extension/src/main/java/io/ballerina/flowmodelgenerator/extension/DataMapperService.java Passes semantic model to data mapper for type resolution
flow-model-generator/modules/flow-model-generator-core/src/main/java/io/ballerina/flowmodelgenerator/core/DataMapManager.java Core implementation of tuple type handling, including bracket notation for tuple indexing, default value generation, and proper member type tracking

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@pasindufernando1 pasindufernando1 marked this pull request as ready for review January 22, 2026 09:46
@LakshanWeerasinghe
Copy link
Contributor

@pasindufernando1 can you add a screen recording on how we handle tuples in the data mapper?

@LakshanWeerasinghe
Copy link
Contributor

Did we consider the cases of filler value concept in tuples? I am not sure about the use cases in data mapper.
@gimantha

function transform() returns [string, int] => [];

@pasindufernando1
Copy link
Contributor Author

Did we consider the cases of filler value concept in tuples? I am not sure about the use cases in data mapper. @gimantha

function transform() returns [string, int] => [];

Yes this case is also handled

@pasindufernando1
Copy link
Contributor Author

@pasindufernando1 can you add a screen recording on how we handle tuples in the data mapper?

Added to the issue : wso2/product-ballerina-integrator#2304 (comment)

@gimantha
Copy link
Contributor

Did we consider the cases of filler value concept in tuples? I am not sure about the use cases in data mapper. @gimantha

function transform() returns [string, int] => [];

Filler value concept shoud be considered in case if a pro-code user wants to view it in datamapper. Filler values should be shown as default values in datamapper output. It not low-coder user might see it as not mapped.

@KavinduZoysa KavinduZoysa requested a review from gimantha February 3, 2026 04:57
@KavinduZoysa
Copy link
Contributor

@pasindufernando1, let's add a test to the nested tuple.

for (int i = 0; i < size; i++) {
List<Mapping> elements = new ArrayList<>();
Node expr = expressions.get(i);
String elementPath = isTuple ? name + "[" + i + "]" : name + "." + i;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I understood, we don't have to handle the notation of a tuple separately.

Since this is a list costructor we can do it in the same way as an array.
@pasindufernando1, can you check the approach again?

@pasindufernando1 pasindufernando1 changed the base branch from main to data-mapper-extended-types February 5, 2026 05:19
@pasindufernando1 pasindufernando1 marked this pull request as draft February 16, 2026 04:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants